Le but de cette présentation est de présenter le minimum de syntaxe python nécessaire aux chapitres 4 et suivants de ce cours. Dès lors, ce n'est qu'une présentation très partielle de la partie orientée objet de python.
Pour des questions plus pointues, vous référer à la référence du langage.
On peut définir une classe élémentaire selon la syntaxe ci-dessous
class Ma_Classe:
def __init__(self, param):
print("Initialisation")
self.attribut = param
self.__attribut_prive = "privé"
def une_methode(self,param):
print(self.attribut, param)
def une_methode_sans_parametre(self):
print(self.attribut, "une_methode_sans_parametre")
Le premier paramètre de toutes les méthodes est l'objet lui même, i.e. l'instanciation de la classe qui appelle la méthode
La méthode __init__
correspond au constructeur en C++. Elle est appelée quand on crée un objet et sert à en initialiser les attributs
mon_objet = Ma_Classe("Hello")
Initialisation
On peut accéder aux attributs de l'objet directement
print(mon_objet.attribut)
Hello
On peut même accéder aux attributs privés. __NomAttribut
est décoré hors de la classe en _NomClasse__NomAttribut
print(mon_objet._Ma_Classe__attribut_prive)
privé
On peut appeler les méthodes via
mon_objet.une_methode("World")
Hello World
qui est en fait du sucre syntactique sur l'appel de la fonction
Ma_Classe.une_methode(mon_objet,"World")
Hello World
Une méthode n'a pas nécessairement de paramètre
mon_objet.une_methode_sans_parametre()
Hello une_methode_sans_parametre
Toute fonction peut devenir une méthode de la classe de son premier paramètre. Il suffit d'écrire
def une_fonction(obj):
print(obj.attribut,"une fonction externe")
Ma_Classe.une_autre_methode = une_fonction
mon_objet.une_autre_methode()
Hello une fonction externe
qui, rappelons-le, n'est que du sucre autour de
Ma_Classe.une_autre_methode(mon_objet)
Hello une fonction externe
On peut afficher un objet avec la fonction print
, mais le résultat n'est pas très intéressant
print(mon_objet)
<__main__.Ma_Classe object at 0x107d26b70>
Mais on peut customiser l'affichage en définissant la méthode magique __str__
qui doit retourner une string. Par exemple
def maclasse_to_string(obj):
return "Attribut: {}".format(obj.attribut)
Ma_Classe.__str__ = maclasse_to_string
print(mon_objet)
Attribut: Hello
Il y a de nombreuses autres fonctions magiques, qui permettent entre autre de surcharger les opérateurs. Par exemple, pour émuler les
types numériques, on peut surcharger l'opérateur +
en définissant __add__(self,other)
.
Pour les types conteneurs qui nous intéressent dans ce cours d'ASD, on notera entre autres
__len__(self)
qui est appelé par la fonction len(Conteneur)
et retourne le nombre d'éléments__getitem__(self)
et __setitem__(self,val)
qui surchargent l'opérateur []
d'accès indexé
© Olivier Cuisenaire, 2018 |